﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MIZ.Models
{
    [MetadataType(typeof(Taal_meetinstrumentValidationClass))]
    public partial class Taal
    {
        public static Taal ReturnViews(int id)
        {
            DatabaseModelContainer db = new DatabaseModelContainer();
            return db.TaalSet.Find(id);
        }

        public static Taal Create(Taal taal)
        {
            DatabaseModelContainer db = new DatabaseModelContainer();

            db.TaalSet.Add(taal);
            db.SaveChanges();

            return taal;
        }

        public static Taal Edit(Taal taal)
        {
            DatabaseModelContainer db = new DatabaseModelContainer();

            db.Entry(taal).State = EntityState.Modified;
            db.SaveChanges();

            return taal;
        }

        public static Taal Delete(int id)
        {
            DatabaseModelContainer db = new DatabaseModelContainer();

            Taal taal = db.TaalSet.Find(id);

            List<Meetinstrument> meetinstrumentenlijst = db.MeetinstrumentSet.ToList();

            for (long i = 0; i < meetinstrumentenlijst.LongCount(); i++)
            {
                if (meetinstrumentenlijst[Convert.ToInt32(i)].Taal == taal)
                {
                    meetinstrumentenlijst[Convert.ToInt32(i)].Taal.Remove(taal);
                }
            }

            db.TaalSet.Remove(taal);
            db.SaveChanges();

            return taal;
        }

        public static List<SelectListItem> ReturnListCustomTaal()
        {
            DatabaseModelContainer db = new DatabaseModelContainer();
            List<SelectListItem> _ReturnLijst = new List<SelectListItem>();
            ICollection<Meetinstrument> _MeetinstrumentenLijst = MIZ.Models.Meetinstrument.GetSetMeetinstrumentenLijst;
            List<Taal> _TempLijst = new List<Taal>();
            List<Taal> _UniekeTempLijst = new List<Taal>();
            Meetinstrument _Meetinstrument = null;
            Taal _Taal = null;
            bool _Aanwezig = false;

            for (int i = 0; i < _MeetinstrumentenLijst.Count; i++)
            {
                _Meetinstrument = _MeetinstrumentenLijst.ElementAt(i);
                _TempLijst = _Meetinstrument.Taal.ToList();
                for (int j = 0; j < _TempLijst.Count; j++)
                {
                    _Taal = _TempLijst[j];
                    for (int k = 0; k < _UniekeTempLijst.Count; k++)
                    {
                        if (!_Aanwezig)
                        {
                            if (_UniekeTempLijst[k] == _Taal)
                            {
                                _Aanwezig = true;
                            }
                        }
                    }
                    if (!_Aanwezig)
                    {
                        _UniekeTempLijst.Add(_Taal);
                    }
                    else
                    {
                        _Aanwezig = false;
                    }
                }
            }

            for (int i = 0; i < _UniekeTempLijst.Count; i++)
            {
                string s = _UniekeTempLijst[i].Taal_meetinstrument;
                _ReturnLijst.Add(new SelectListItem() { Text = s, Value = s });
            }

            return _ReturnLijst;
        }

        public static ICollection<Meetinstrument> VoerKeuzeTaalDoor(string gekozeTaal)
        {
            DatabaseModelContainer db = new DatabaseModelContainer();
            ICollection<Meetinstrument> _ReturnLijst = null;
            if (gekozeTaal == null || gekozeTaal == "")
            {
                _ReturnLijst = MIZ.Models.Meetinstrument.GetSetMeetinstrumentenLijst;
            }
            else
            {
                Taal _Taal = ZoekGekozenTaal(db, gekozeTaal);
                ICollection<Meetinstrument> _TempMeetinstrumentenLijst = _Taal.Meetinstrument.ToList();
                ICollection<Meetinstrument> _OudMeetinstrumentenLijst = MIZ.Models.Meetinstrument.GetSetMeetinstrumentenLijst;

                _ReturnLijst = MIZ.Models.Meetinstrument.MaakNieuweLijstMeetinstrumentenOBVKeuze(_OudMeetinstrumentenLijst, _TempMeetinstrumentenLijst);
            }
            return _ReturnLijst;
        }

        /// <summary>
        /// Zoekt de functie o.b.v. de gekozen index van de dropdownlist
        /// </summary>
        /// <param name="db"></param>
        /// <param name="gekozenAandoening"></param>
        /// <returns>Aandoeningen</returns>
        private static Taal ZoekGekozenTaal(DatabaseModelContainer db, string gekozenTaal)
        {
            Taal _Taal = null;
            List<Taal> _TempLijst = db.TaalSet.ToList();

            for (int i = 0; i < _TempLijst.Count; i++)
            {
                if (_TempLijst[i] != null)
                {
                    string s = _TempLijst[i].Taal_meetinstrument.ToString();
                    if (s == gekozenTaal)
                    {
                        _Taal = _TempLijst[i];
                    }
                }
            }
            return _Taal;
        }
    }
}